home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 208_01 / e1.c < prev    next >
Text File  |  1987-10-11  |  6KB  |  274 lines

  1. /*
  2. HEADER:        CUG208;
  3. TITLE:        'e' for CP/M68K
  4. VERSION:    1.48+
  5.  
  6. DESCRIPTION:    "a screen editor";
  7.  
  8. KEYWORDS:    editor;
  9. SYSTEM:        CP/M68K, V1.2;
  10. FILENAME:    e/e1.c
  11. WARNINGS:    "the default value is for systems with 128K bytes
  12.          of memory or more";
  13. SEE-ALSO:    cpm68k.c, e68k.doc, CUG VOL 133;
  14. AUTHORS:    G.N.Gilbert('e'), J.W.Haefner(for DeSmet C on MSDOS and UNIX)
  15. CODER:        Yoshimasa Tsuji
  16. COMPILERS:    DRI C(Alcyon C) for CP/M68K;
  17. */
  18. /*
  19.     FUNCTIONS:  printdirectory, envir, files, putonoff, putxy, getnumb
  20.     PURPOSE:  environment; change files.
  21. */
  22.  
  23. #include "e.h"
  24.  
  25.  
  26. printdirectory(path)
  27. char *path;
  28. {
  29.     int y, cols;
  30.     int entriesonline = 0;
  31.     extern char *readdir();
  32.     register char *p;
  33.  
  34.  
  35.     clear();
  36.     if (errmess != 0) {
  37.         gotoxy(EMPOS,0);
  38.         putstr(errmess);
  39.     }
  40.     gotoxy(0,6);
  41.     putstr("Directory of ");
  42.     putstr(path);
  43.     putch(':');
  44.     if (strcmp(curdir,path) && chdir(path) != FAIL) {
  45.         putstr("  |(working directory is ");
  46.         putstr(curdir);
  47.         putstr(":|)");
  48.     }
  49.     standout(); isdim = YES;
  50.     deleteline(2,(y=8));
  51.  
  52.     p = readdir(path);
  53.     /* the names are separated by a NEWLINE and
  54.      * terminated by a NULL
  55.      */
  56.     while (*p) {
  57.         if (inbufp) {
  58.             putstr(" ...");
  59.             goto incomplete;
  60.         }
  61.         cols = 0;
  62.         while(*p != '\n')
  63.             cols++, putch(*p++);
  64.         p++;
  65.         while (cols++ < 13) putch(' ');
  66.         if (++entriesonline == 6) {
  67.             deleteline(2,++y);
  68.             if (y == SHEIGHT) {
  69.                 putstr("[||<cr>| for MORE...]");
  70.                 getkey();
  71.                 standout(); isdim = YES;
  72.                 delpage((y=8));
  73.                 gotoxy(2,8);
  74.             }
  75.             entriesonline=0;
  76.         }
  77.     }
  78.     gotoxy(50,SHEIGHT);
  79.     putstr("Free space = ");
  80.     uspr(getfree(path));
  81. incomplete:
  82.     if (strcmp(curdir,path))
  83.         chdir(curdir);
  84.     standend(); isdim = NO;
  85.     gotoxy(0,0);
  86. }
  87.  
  88.  
  89. #define XTEXT 10
  90. #define XVAL  42
  91. #define XPROMPT 63
  92. #define YTITLE 4
  93. #define YFILE 6
  94. #define YAUTO 8
  95. #define YBACKUP 9
  96. #define YTAB 10
  97. #define YSTRIP 11
  98. #define YCURSOR 12
  99. #define YSCROLL 13
  100.  
  101. #define YHILITE 14
  102. #define YPROMPT 16
  103. #define YSPACE 22
  104. envir()
  105. {
  106.     puttext();
  107.     clear();
  108.     putstatusline(cline);
  109.  
  110.     putxy(YTITLE,"Edit context:");
  111.     putxy(YFILE,"  |enter |F| for file context");
  112.     putxy(YAUTO,"A|uto indent:");
  113.     putonoff(YAUTO,autoin);
  114.     putxy(YBACKUP,"|make |B|ackup of original file:");
  115.     putonoff(YBACKUP,backup);
  116.     putxy(YTAB,"T|ab stops every");
  117.     gotoxy(XVAL,YTAB);
  118.     uspr(tabwidth);
  119.     putxy(YSTRIP,"S|trip trailing blanks,tabs");
  120.     putonoff(YSTRIP,!trail);
  121.     putxy(YCURSOR,"|display cursor |L|ine and column");
  122.     putonoff(YCURSOR,displaypos);
  123.     putxy(YSCROLL,"H|orizontal scroll whole screen");
  124.     putonoff(YSCROLL,blockscroll);
  125.     putxy(YHILITE,"|h|I|ghlight cursor line");
  126.     putonoff(YHILITE,hilight);
  127.  
  128.     putxy(YSPACE,"|Memory allows for no more than ");
  129.     uspr( (slotsinmem-2)*(PAGESIZE/sizeof(struct addr)) );
  130.     putstr("| lines of text");
  131.  
  132.     putxy(YPROMPT,"Enter a letter, or [return] to exit:");
  133.     for(;;) {
  134.         gotoxy(XPROMPT,YPROMPT);
  135.         switch(getlow()) {
  136.         case 'a':
  137.             putonoff(YAUTO,(autoin=!autoin));
  138.             continue;
  139.         case 'b':
  140.             putonoff(YBACKUP,(backup=!backup));
  141.             continue;
  142.         case 't':
  143.             putxy(YTAB,"|Enter new |tab width|:");
  144.             gotoxy(XVAL,YTAB);
  145.             putstr("    ");
  146.             gotoxy(XVAL,YTAB);
  147.             tabwidth=getnumb();
  148.             putxy(YTAB,"T|ab stops every        ");
  149.             continue;
  150.         case 'l':
  151.             putonoff(YCURSOR,(displaypos=!displaypos));
  152.             continue;
  153.         case 'h':
  154.             putonoff(YSCROLL,(blockscroll=!blockscroll));
  155.             continue;
  156.         case 's':
  157.             putonoff(YSTRIP,!(trail=!trail));
  158.             continue;
  159.         case 'i':
  160.             putonoff(YHILITE,(hilight=!hilight));
  161.             continue;
  162.         case 'f':
  163.             files();
  164.         case 'q':
  165.         case 'm':
  166.         case ESCKEY:
  167.             break;
  168.         }
  169.         break;
  170.     }
  171.     clear();
  172.     topline=1;
  173.     if (helpon) dohelp();
  174.     putpage();
  175. }
  176.  
  177. files()
  178. {
  179.     char oldname[FILELEN], newname[FILELEN], c;
  180.     /*    int warn;    */
  181.     char dir[PATHLEN];
  182.     char *p;
  183.  
  184.     strcpy(dir, curdir);
  185.     for(;;) {
  186.         printdirectory(dir);
  187.         putstatusline(cline);
  188. newcomm:
  189.         errmess=0;
  190.         gotoxy(0,1);
  191.         putstr("|Enter |[return]| to exit           |D| to delete a file\n");
  192.         putstr("      R| to rename a file         |V| to view another directory  \n");
  193.         deleteline(0,3);
  194.         putstr("      C| to change the name of the edited file ");
  195.         putstr(filename);
  196.         deleteline(0,4);
  197.         deleteline(0,5);
  198.         gotoxy(6,4);
  199.         c=getlow();
  200.         putstatusline(cline);
  201.         deleteline(6,4);
  202.         if (c == 'r' || c == 'd' || c == 'c') {
  203.             putstr("Name of file: ");
  204.             scans(oldname,FILELEN);
  205.             if (!oldname[0]) goto newcomm;
  206.             format(oldname);
  207.         }
  208.         switch (c) {
  209.         case 'm':
  210.         case 'q':
  211.         case ESCKEY:
  212.             return;
  213.         case 'v':
  214.             putstr("Enter pathname ending with a / ");
  215.             scans(dir, FILELEN);
  216.             p = dir;
  217.             while(*p)p++;
  218.             if(*--p != '/')
  219.                 strcpy(dir, curdir);
  220.             else
  221.                 *p = 0;
  222.             continue;
  223.         case 'd':
  224.             if (unlink(oldname) == FAIL) {
  225.                 error("Can't delete");
  226.                 goto newcomm;
  227.             }
  228.             break;
  229.         case 'r' :
  230.             deleteline(6,5);
  231.             putstr("New name:     ");
  232.             scans(newname,FILELEN);
  233.             format(newname);
  234.             if (!newname[0] || rename(oldname,newname) == FAIL) {
  235.                 error("Can't rename");
  236.                 goto newcomm;
  237.             }
  238.             break;
  239.         case 'c'  :
  240.             strcpy(filename,oldname);
  241.             putstatusline(cline);
  242.         default:
  243.             goto newcomm;
  244.         }
  245.     }
  246. }
  247.  
  248. putxy(row,string)
  249. int row;
  250. char *string;
  251. {
  252.     gotoxy(XTEXT,row);
  253.     putstr(string);
  254. }
  255.  
  256. putonoff(row,flag)
  257. int row,flag;
  258. {
  259.     gotoxy(XVAL,row);
  260.     putstr((flag?"ON ":"OFF"));
  261. }
  262.  
  263. getnumb()
  264. {
  265.     int i, n, c;
  266.     char numb[5];
  267.  
  268.     scans(numb,5);
  269.     n=0;
  270.     for (i=0; (c=numb[i]); i++)
  271.         if (c >= '0' && c <= '9') n= n*10+c-'0';
  272.     return(n);
  273. }
  274.